package com.itlong.cloud.utils.file;

import java.io.*;
import java.nio.file.Paths;

/**
 * <desc>
 *      云对讲pem密钥文件Util
 * </desc>
 *
 * @createDate 2017-12-07.
 */
public class PemFileUtil {
    /**
     * <desc>
     *      获取云对讲pem文件名（不含扩展名）
     * <desc/>
     *
     * @param typePid 云对讲设备pid
     * @param keyType pem密钥类型：1-签名私钥，2-签名公钥，3-服务器公钥
     * @return
     * @author Chunjian.G
     * @createDate 2017-12-07
     */
    public static String getPemFileName(String typePid, Integer keyType){
        switch (keyType){
            case 1:
                return typePid + "_ec_key";
            case 2:
                return typePid + "_ec_pub";
            case 3:
                return typePid + "_key_server";
        }
        return typePid + keyType;
    }

    /**
     * <desc>
     *      获取云对讲pem文件名（含扩展名）
     * <desc/>
     *
     * @param typePid 云对讲设备pid
     * @param keyType pem密钥类型：1-签名私钥，2-签名公钥，3-服务器公钥
     * @return
     * @author Chunjian.G
     * @createDate 2017-12-07
     */
    public static String getPemFileFullName(String typePid, Integer keyType){
        return getPemFileName(typePid, keyType) + ".pem";
    }


    /**
     * <desc>
     *      保存文件到本地
     * <desc/>
     *
     * @param inputStream 输入流
     * @param fullFileName 文件全名（含扩展名）
     * @param fileDirPath 文件路径
     * @return
     * @author Chunjian.G
     * @createDate 2017-12-07
     */
    public static void savePemFileToLocal(InputStream inputStream, String fullFileName, String fileDirPath) throws Exception{
        OutputStream os = null;
        try {
            // 1K的数据缓冲
            byte[] bs = new byte[1024];
            // 读取到的数据长度
            int len;
            //判断文件夹是否存在，不存在则创建
            File dirFile = new File(fileDirPath);
            if (!dirFile.exists()) {
                dirFile.mkdirs();
            }
            //判断文件是否已存在，存在则删除旧文件
            File file = new File(Paths.get(fileDirPath, fullFileName).toString());
            if (file.exists()){
                file.delete();
            }

            // 输出的文件流保存到本地文件
            os = new FileOutputStream(dirFile.getPath() + File.separator + fullFileName);
            // 开始读取
            while ((len = inputStream.read(bs)) != -1) {
                os.write(bs, 0, len);
            }
        } finally {
            // 完毕，关闭所有链接
            if (null != os){
                os.close();
            }
            if (null != inputStream){
                inputStream.close();
            }
        }
    }

    /**
     * <desc>
     *    拷贝流.
     * </desc>
     *
     * @param  inputStream 输入流
     * @return 拷贝后的输出流
     * @author LewisLouis
     * @createDate 2017-11-23
     */
    public static ByteArrayOutputStream cloneInputStream (InputStream inputStream) throws IOException {
        ByteArrayOutputStream forCloneStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int readLength = 0;
        while ((readLength = inputStream.read(buffer)) != -1) {
            forCloneStream.write(buffer, 0, readLength);
        }
        forCloneStream.flush();
        return forCloneStream;
    }
}
